﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Drawing;
using Civilisation_code.PCarte;

namespace Civilisation_code.PPartie
{
    /// <summary>
    /// Classe abstraite Monteur_Partie
    /// <remarks>
    /// Monteur dans le patron de conception Monteur
    /// </remarks>
    /// </summary>
    public abstract class Monteur_Partie
    {
        /// <summary>
        /// Partie créé
        /// </summary>
        public Partie _partie { get; set; }

        /// <summary>
        /// Génération de la partie
        /// </summary>
        /// <param name="infos_joueurs">Information des joueurs</param>
        /// <param name="grande_taille">Grande ou petite carte</param>
        public void genererPartie(Hashtable infos_joueurs, bool grande_taille)
        {
            _partie = new Partie();
            Partie.INSTANCE = _partie;
            //Récupération de la position des joueurs
            List<Case> position_joueurs = genererCarte(grande_taille,infos_joueurs.Count);
            ///Création des joueurs
            genererJoueurs(infos_joueurs,position_joueurs);
        }

        /// <summary>
        /// Méthode de création des joueurs
        /// </summary>
        /// <param name="infos_joueurs">Informations des joueurs</param>
        /// <param name="position_joueurs">Position des joueurs</param>
        protected abstract void genererJoueurs(Hashtable infos_joueurs, List<Case> position_joueurs);

        /// <summary>
        /// Méthode de création de la carte
        /// </summary>
        /// <param name="grande_taille">Grande ou petite carte</param>
        /// <param name="nb_joueurs">Nombre de joueurs dans la partie</param>
        /// <returns></returns>
        protected abstract List<Case> genererCarte(bool grande_taille, int nb_joueurs);
       
    }
}
